#ifndef CLIENTE_CPP
#define CLIENTE_CPP

#include "Cliente.h"

ostream &operator<<(ostream &out, const ICliente &c){
	out<<c.ObtenerCI()<<"\t\t\t"<<c.ObtenerNombre()<<"\t\t\t"<<c.ObtenerFechaRegistro()<<"\t\t";
	return out;
}

Cliente::Cliente(const Cadena &c_i, const Cadena &nom, const Cadena &fechaReg){
	nombre = nom;
	ci = c_i;
	fechaRegistro = fechaReg;
	excursionesCompradas = new ListaImp<Puntero<Excursion>>();
	montoComprado = 0;
}

Cliente::~Cliente(){
	excursionesCompradas->BorrarTodos();
	excursionesCompradas = NULL;
}

Cadena Cliente::ObtenerCI()const{
	return ci;
}

Cadena Cliente::ObtenerNombre()const{
	return nombre;
}

Cadena Cliente::ObtenerFechaRegistro() const{
	return fechaRegistro;
}

nat Cliente::ObtenerMontoComprado() const{
	return montoComprado;
}

void Cliente::incrementarMontoComprado(nat &monto){
	montoComprado = montoComprado + monto;
}

void Cliente::agregarExcursionComprada(Puntero<Excursion> &exc){
	excursionesCompradas->Agregar(exc);
}
Puntero<Iterador<Puntero<Excursion>>> Cliente::ObtenerExcursionesCompradas(){
	return excursionesCompradas->ObtenerIterador();
}

bool Cliente::operator==(const ICliente& c) const{
	return nombre == c.ObtenerNombre();
}

bool Cliente::operator <(const ICliente& c) const{
	return nombre < c.ObtenerNombre();
}

bool Cliente::operator >(const ICliente& c) const{
	return nombre > c.ObtenerNombre();
}
#endif